package zh.keep.all.widget

import android.appwidget.AppWidgetManager
import android.appwidget.AppWidgetProvider
import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.util.Log

const val TAG = "MyWidgetProvider"

/**
 * 小组件（无效）
 */
class MyWidgetProvider : AppWidgetProvider() {

    /**
     *  每次收到广播之后就会调用该函数，会在其他方法之前进行回调。一般可以不实现
     *  默认的 AppWidgetProvider 实现会过滤所有应用微件广播并视情况调用上述方法
     */
    override fun onReceive(context: Context?, intent: Intent?) {
        super.onReceive(context, intent)
        Log.d(TAG, "invoke onReceive......")

    }

    /**
     * 调用此方法可以按 AppWidgetProviderInfo 中的 updatePeriodMillis 属性定义的时间间隔来更新应用微件
     * 当用户添加应用微件时也会调用此方法，所以它应执行基本设置，如定义视图的事件处理脚本以及根据需要启动临时的 Service。
     * 不过，如果您已声明配置 Activity，则当用户添加应用微件时不会调用此方法，但会调用它来执行后续更新。
     * 由配置 Activity 负责在配置完成后执行首次更新。
     */
    override fun onUpdate(context: Context?, appWidgetManager: AppWidgetManager?, appWidgetIds: IntArray?) {
        super.onUpdate(context, appWidgetManager, appWidgetIds)
        Log.d(TAG, "invoke onUpdate......")
//        val timer = Timer()
//        val timerTask: TimerTask = object : TimerTask() {
//            override fun run() {//定时任务
//                appWidgetIds?.forEach {
//                    val pendingIntent: PendingIntent =
//                        Intent(context, MainActivity::class.java).let { intent ->
//                            PendingIntent.getActivity(context, 0, intent, 0)
//                        }
//                    val views: RemoteViews =
//                        RemoteViews(context?.packageName, R.layout.layout_my_card_widget).apply {
//                            setTextViewText(R.id.time, SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Date(System.currentTimeMillis())))//设置小组件TextView的值
//                        }
//                    //执行更新
//                    appWidgetManager?.updateAppWidget(appWidgetIds, views)
//                }
//            }
//        }
//        timer.schedule(timerTask, 0,1000)
        Log.d(TAG, "invoke onUpdate......")
    }

    /**
     * 当首次放置微件时以及每当调整微件的大小时，会调用此方法。您可以使用此回调来根据微件的大小范围显示或隐藏内容
     */
    override fun onAppWidgetOptionsChanged(context: Context?, appWidgetManager: AppWidgetManager?, appWidgetId: Int, newOptions: Bundle?) {
        super.onAppWidgetOptionsChanged(context, appWidgetManager, appWidgetId, newOptions)
        Log.d(TAG, "invoke onAppWidgetOptionsChanged......")

    }

    /**
     * 每次从应用微件托管应用中删除应用微件时，都会调用此方法。
     */
    override fun onDeleted(context: Context?, appWidgetIds: IntArray?) {
        super.onDeleted(context, appWidgetIds)
        Log.d(TAG, "invoke onDeleted......")
    }

    /**
     * 首次创建应用微件的实例时，会调用此方法。例如，如果用户添加应用微件的两个实例，只有首次添加时会调用此方法。
     * 如果您需要打开一个新的数据库或执行只需要对所有应用微件实例执行一次的其他设置，则此方法非常合适。
     */
    override fun onEnabled(context: Context?) {
        super.onEnabled(context)
        Log.d(TAG, "invoke onEnabled......")
    }

    /**
     * 从应用微件托管应用中删除了应用微件的最后一个实例时，会调用此方法。
     * 您应使用此方法来清理在 onEnabled(Context) 中完成的所有工作，如删除临时数据库。
     */
    override fun onDisabled(context: Context?) {
        super.onDisabled(context)
        Log.d(TAG, "invoke onDisabled......")
    }

    override fun onRestored(context: Context?, oldWidgetIds: IntArray?, newWidgetIds: IntArray?) {
        super.onRestored(context, oldWidgetIds, newWidgetIds)
        Log.d(TAG, "invoke onRestored......")
    }
}
